/**
 * PANDA 3D SOFTWARE
 * Copyright (c) Carnegie Mellon University.  All rights reserved.
 *
 * All use of this software is subject to the terms of the revised BSD
 * license.  You should have received a copy of this license along
 * with this source code in a file named "LICENSE."
 *
 * @file socketStreamRecorder.I
 * @author drose
 * @date 2004-01-28
 */

/**
 *
 */
INLINE SocketStreamRecorder::
SocketStreamRecorder() :
  _stream(nullptr),
  _owns_stream(false),
  _closed(true)
{
}

/**
 *
 */
INLINE SocketStreamRecorder::
SocketStreamRecorder(SocketStream *stream, bool owns_stream) :
  _stream(stream),
  _owns_stream(owns_stream),
  _closed(false)
{
}

/**
 *
 */
INLINE SocketStreamRecorder::
~SocketStreamRecorder() {
  if (_owns_stream) {
    delete _stream;
  }
}

/**
 * See SocketStream::send_datagram().
 */
bool SocketStreamRecorder::
send_datagram(const Datagram &dg) {
  if (_stream != nullptr) {
    return _stream->send_datagram(dg);
  }
  return true;
}

/**
 * See SocketStream::is_closed().
 */
INLINE bool SocketStreamRecorder::
is_closed() {
  if (_stream != nullptr) {
    return _stream->is_closed();
  }
  return is_playing() && _closed;
}

/**
 * See SocketStream::close().
 */
INLINE void SocketStreamRecorder::
close() {
  if (_stream != nullptr) {
    _stream->close();
  }
  _closed = true;
}

/**
 * See SocketStream::set_collect_tcp().
 */
INLINE void SocketStreamRecorder::
set_collect_tcp(bool collect_tcp) {
  if (_stream != nullptr) {
    _stream->set_collect_tcp(collect_tcp);
  }
}

/**
 * See SocketStream::get_collect_tcp().
 */
INLINE bool SocketStreamRecorder::
get_collect_tcp() const {
  if (_stream != nullptr) {
    return _stream->get_collect_tcp();
  }
  return false;
}

/**
 * See SocketStream::set_collect_tcp_interval().
 */
INLINE void SocketStreamRecorder::
set_collect_tcp_interval(double interval) {
  if (_stream != nullptr) {
    _stream->set_collect_tcp_interval(interval);
  }
}

/**
 * See SocketStream::get_collect_tcp_interval().
 */
INLINE double SocketStreamRecorder::
get_collect_tcp_interval() const {
  if (_stream != nullptr) {
    return _stream->get_collect_tcp_interval();
  }
  return 0.0;
}

/**
 * See SocketStream::consider_flush()
 */
INLINE bool SocketStreamRecorder::
consider_flush() {
  if (_stream != nullptr) {
    return _stream->consider_flush();
  }
  return true;
}

/**
 * See SocketStream::flush()
 */
INLINE bool SocketStreamRecorder::
flush() {
  if (_stream != nullptr) {
    _stream->flush();
    return !_stream->is_closed();
  }
  return true;
}
